package net.neptech.model.dto;



import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import net.neptech.model.appointment.Appointment;

import java.time.LocalDateTime;

/**
 * 延迟消息DTO
 * 用于在Kafka中传递延迟消息信息
 *
 * @author neptech
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DelayMessage {

    /**
     * 消息唯一ID
     */
    private String messageId;


    /**
     * 消息类型（如：ORDER_TIMEOUT）
     */
    private String messageType;

    private Appointment content;

    /**
     * 延迟执行时间
     */
    private LocalDateTime executeTime;

    /**
     * 消息创建时间
     */
    private LocalDateTime createTime;

    /**
     * 重试次数
     */
    private Integer retryCount;

    /**
     * 最大重试次数
     */
    private Integer maxRetryCount;

    /**
     * 消息状态（PENDING, PROCESSING, COMPLETED, FAILED）
     */
    private String status;

    /**
     * 判断消息是否到达执行时间
     *
     * @return 是否到达执行时间
     */
    public boolean isTimeToExecute() {
        return executeTime != null && LocalDateTime.now().isAfter(executeTime);
    }

    /**
     * 判断是否可以重试
     *
     * @return 是否可以重试
     */
    public boolean canRetry() {
        return retryCount != null && maxRetryCount != null && retryCount < maxRetryCount;
    }

    /**
     * 增加重试次数
     */
    public void incrementRetryCount() {
        if (retryCount == null) {
            retryCount = 0;
        }
        retryCount++;
    }
}
